home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / kiss-0.11 / kiss-0 / kiss / src / doecho.c < prev    next >
C/C++ Source or Header  |  1995-03-23  |  1KB  |  81 lines

  1. #include "kiss.h"
  2.  
  3. static void echostring (char *s, int escape)
  4. {
  5.     register char
  6.     *cp;
  7.  
  8.     for (cp = s; *cp; cp++)
  9.     if (! escape || *cp != '\\' || ! *(cp + 1))
  10.         putchar (*cp);
  11.     else
  12.     {
  13.         cp++;
  14.         switch (*cp)
  15.         {
  16.         case 'a':
  17.             putchar ('\a');
  18.             break;
  19.         case 'b':
  20.             putchar ('\b');
  21.             break;
  22.         case 'n':
  23.             putchar ('\n');
  24.             break;
  25.         case 'r':
  26.             putchar ('\r');
  27.             break;
  28.         case 't':
  29.             putchar ('\t');
  30.             break;
  31.         case 'v':
  32.             putchar ('\v');
  33.             break;
  34.         default:
  35.             putchar (*cp);
  36.             break;
  37.         }
  38.     }
  39. }
  40.  
  41. int doecho (Stringstack s)
  42. {
  43.     register int
  44.     opt,
  45.     i;
  46.     EchoFlags
  47.     fl = { 0, 0 };
  48.  
  49.     while ( (opt = getopt (s.nstr, s.str, "neh")) != -1 )
  50.     switch (opt)
  51.     {
  52.         case 'e':
  53.         fl.escape = 1;
  54.         break;
  55.         case 'n':
  56.         fl.nonewline = 1;
  57.         break;
  58.         case 'h':
  59.         default:
  60.         error ("Bad commandline.\n"
  61.                "Usage: %s [-ne] strings\n"
  62.                "Where:\n"
  63.                "    -n: don't print terminating newline character\n"
  64.                "    -e: interpret escape sequences "
  65.                         "\\a \\b \\n \\r \\t \\v \n"
  66.                "    strings: strings to display\n"
  67.                , progname);
  68.     }
  69.  
  70.     for (i = optind; i < s.nstr; i++)
  71.     {
  72.     echostring (s.str [i], fl.escape);
  73.     if (i < s.nstr - 1)
  74.         putchar (' ');
  75.     }
  76.     if (! fl.nonewline)
  77.     putchar ('\n');
  78.  
  79.     return (0);
  80. }
  81.